package com.sdry.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.commons.CommonsMultipartFile;

/**
 * 
 *@ClassName: CreateFileReturnPath 
 *@Description: 文件上传下载
 *@Author tdd
 *@Date 2018-6-26 下午5:27:23 
 *@version 1.0
 */
public class CreateFileReturnPath {
	/**
	 * 文件保存项目相对路径
	 */
	public final static String FILE_PATH = "INDEX//img//";
	
	/**
	 * 目录是否存在    true：存在  false：不存在      目录不为空，直接创建目录
	 * @param str
	 * @return
	 */
	public static boolean  fileIsNotEmpty(String str){
		if((str!=null)&&!"".equals(str.trim())){
			 File file = new File(str.trim());
			 if (!file.exists()) {
			    file.mkdirs();
			}
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * 根据当前时间生成文件名
	 * @return 时间字符串 + .**
	 */
	public static String fileName(CommonsMultipartFile qfile){
		Date now = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");// 可以方便地修改日期格式
		//最后一个“.”后的数据（.TXT）
    	int pos =qfile.getOriginalFilename().lastIndexOf(".");
    	String fileext = qfile.getOriginalFilename().substring(pos); 
		return dateFormat.format(now)+fileext;
	}
	/**
	 * 根据当前时间生成字符串
	 * @return 时间字符串 
	 */
	public static String dateString(){
		Date now = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");// 可以方便地修改日期格式
		return dateFormat.format(now);
	}
	
	/**
	 * 创建文件
	 * @param qfile 文件
	 * @param request request对象
	 * @return 文件路径
	 */
	public static String createFile(CommonsMultipartFile qfile,HttpServletRequest request){
	    //文件保存项目绝对路径
	    String str = request.getSession().getServletContext()
				.getRealPath("/")+FILE_PATH;
	    //目录是否存在  && 文件是否为空
	    if(fileIsNotEmpty(str) && qfile.getSize() != 0){
	    	
	    	//yyyyMMddHHmmss.**  时间字符串 + .**
	    	String path = fileName(qfile);
    		//文件保存项目绝对路径+（时间字符串 + .**）
    		String savePath=str+path;
    		//创建文件
    		File newFile=new File(savePath);
    		//通过CommonsMultipartFile的方法直接写文件（注意这个时候）
    		try {
    			qfile.transferTo(newFile);
    			System.out.println(savePath);
    			//返回相对路径
    			return FILE_PATH+path;
    		} catch (IllegalStateException e) {
    			//e.printStackTrace();
    			return "";
    		} catch (IOException e) {
    			//e.printStackTrace();
    			return "";
    		}
    		
	    }else{
    		return "";
    	}
	}
	
	
	
	
	
	
	
	
	/**
	 * 文件导出
	 * 
	 * @return
	 * @throws Exception 
	 */
	public static void  down(String down,HttpServletRequest request, HttpServletResponse response) throws Exception{
		down =  request.getSession().getServletContext()
				.getRealPath("/")+down ;
		File outfile = new File(down);
		Date now = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");// 可以方便地修改日期格式
	    String nowtime = dateFormat.format(now);
		if (outfile.exists()) {
			int pos =outfile.getName().lastIndexOf(".");
			String fileext = outfile.getName().substring(pos);
			String filename = nowtime+fileext;// 获取文件名称
			InputStream fis = new BufferedInputStream(new FileInputStream(
					down));
			byte[] buffer = new byte[fis.available()];  
			fis.read(buffer);  //读取文件流
			fis.close();
			response.reset();  //重置结果集
			response.addHeader("Content-Disposition", "attachment;filename="
					+ new String(filename.replaceAll(" ", "").getBytes("utf-8"),
							"iso8859-1"));  //返回头 文件名
			response.addHeader("Content-Length", "" + outfile.length());  //返回头 文件大小
			response.setContentType("application/octet-stream");    //设置数据种类
			//获取返回体输出权
			OutputStream os = new BufferedOutputStream(response.getOutputStream());  
			os.write(buffer); // 输出文件
			os.flush();
			os.close();
		}else {
			/*response.sendRedirect(request.getSession().getServletContext().getContextPath()+"/jumpPage/notFind.do");*/
			/*response.setContentType("text/html; charset=UTF-8");
			PrintWriter out = response.getWriter();
			out.print("<script type='text/javascript'>alert('该文件已删除，请联系管理员!');</script>");
			 out.println("history.go(-1);");
			out.close();
			*/
			
			response.setContentType("text/html;charset=UTF-8");
			response.setCharacterEncoding("UTF-8");
			response.setHeader("Cache-Control", "no-cache");
			PrintWriter out = response.getWriter();
			out.println("<script language='javascript'>");
			out.println("alert('" + "该文件已删除，请联系管理员!" + "')");
			out.println("history.go(-1)");
			out.println("</script>");
			out.flush();
			out.close();
			out = null;
		}
	}
}
